package com.zjdiepu.www.ibiz.zx;

import java.util.List;
import java.util.Set;

import com.zjdiepu.www.base.core.AbstractSysUser;
import com.zjdiepu.www.base.enums.type.OperateType;
import com.zjdiepu.www.model.zx.dto.ZxCreditQuery;
import com.zjdiepu.www.model.zx.ext.ZxCreditQueryExt;
import com.zjdiepu.www.model.zx.response.ZxCreditQueryDetail;

/**
 * zx_征信查询申请Service层操作<br/>
 * @author zhangpp<br/>
 * @time 2017年05月09日 15时16分<br/>
 * @since 1.0<br/>
 */
public interface IZxCreditQueryService {
	/**
	 * 检查是否查询过征信：以申请表的start_date为标准：手工模式<br/>
	 * 说明：检查是否查询过征信：以申请表的start_date为标准<br/>
	 * 注意：必须先检查参数不能为空
	 * @param customNo
	 * @param bankCode
	 * @return 历史征信结果
	 */
	ZxCreditQuery checkApplyedZxWithConfigDates(String customNo, String bankCode);
	/**
	 * 检查是否查询过征信：以申请表的start_date为标准：接口模式<br/>
	 * 说明：检查是否查询过征信：以申请表的start_date为标准<br/>
	 * 注意：必须先检查参数不能为空
	 * @param customNo
	 * @return 历史征信结果
	 */
	ZxCreditQuery checkAutoApplyedZxWithConfigDates(String customNo, String bankCode);
	/**
	 * 检查身份证是否正在申请征信:手工模式<br/>
	 * 说明：已经提交征信，但是结果还没有返回<br/>
	 * 注意：必须先检查参数不能为空
	 * @param customNo
	 * @return
	 */
	boolean checkApplyingZx(String customNo);
	/**
	 * 检查身份证是否正在申请征信:接口模式<br/>
	 * 说明：已经提交征信，但是结果还没有返回<br/>
	 * 注意：必须先检查参数不能为空
	 * @param customNo
	 * @return
	 */
	boolean checkAutoApplyingZx(String customNo);
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: saveChange  <br/>
	 * @Description: 更换主借人 <br/>
	 * @param currentUser
	 * @param applyId 征信查询申请ID
	 * @param busiId 业务ID
	 * @param subApplyId 配偶征信子查询ID
	 * @version V1.0  <br/>
	 */
	void saveChange(AbstractSysUser currentUser, String applyId, String busiId, String subApplyId);
	
	/**
	 * 变更主借人：条件查询
	 * @param zxCreditQueryExt
	 * @return
	 */
	List<ZxCreditQuery> selectForChange(ZxCreditQueryExt zxCreditQueryExt);
	
	/**
	 * 变更主借人：条件统计
	 * @param zxCreditQueryExt
	 * @return
	 */
	int countForChange(ZxCreditQueryExt zxCreditQueryExt);
	
	/**
	 * 新增,更新和保存
	 * 
	 * @param ZxCreditQuery 
	 * @param OperateType 操作类型 {@link OperateType}
	 */
	void saveUpdateAndDelete(ZxCreditQuery zxCreditQuery,OperateType operType);
	
	/**
	 * 条件查询
	 * @date 2017年05月09日 15时16分
	 * @param zxCreditQueryExt
	 * @return
	 */
	List<ZxCreditQuery> selectByExt(ZxCreditQueryExt zxCreditQueryExt);
	
	/**
	 * 条件统计
	 * @date 2017年05月09日 15时16分
	 * @param zxCreditQueryExt
	 * @return
	 */
	int countByExt(ZxCreditQueryExt zxCreditQueryExt);
	
	/**
	 * 主键查询
	 * @date 2017年05月09日 15时16分
	 * @param id
	 * @return
	 */
	ZxCreditQuery selectById(String id);
	
	/**
	 * 多表查询
	 * @date 2017年04月24日 10时42分
	 * @param applyId 申请ID
	 * @return
	 */
	List<ZxCreditQueryDetail> selectMultiByApplyId(String applyId);
	
	/**
	 * 根据主键清除空字段，设置值为null
	 * @date 2017年05月09日 15时16分
	 * @param fieldNames 字段名
	 * @param id 主键
	 */
	void clearEmpty(Set<String> fieldNames, String id);
	/**
	 * 精确统计(=)
	 * @author zhangpp
	 * @time 2017年05月09日 15时16分
	 * @since 1.0
	 * @update
	 * @param sysPower
	 * @return
	 */
	int countRefined(ZxCreditQuery zxCreditQuery);
	/**
	 * 精确查询(=)
	 * @author zhangpp
	 * @time 2017年05月09日 15时16分
	 * @since 1.0
	 * @update
	 * @param zxCreditQuery
	 * @return
	 */
	ZxCreditQuery selectRefined(ZxCreditQuery zxCreditQuery);
	/**
	 * @author zhangpp <br/>
	 * @Title repeat  <br/>
	 * @Description 判断是否重复 <br/>
	 * @param zxCreditQuery
	 * @return
	 * @version V1.0  <br/>
	 */
	boolean repeat(ZxCreditQuery zxCreditQuery);
	
	/**
	 * @author zhangpp <br/>
	 * @Title delectRefined  <br/>
	 * @Description 精确删除(=) <br/>
	 * @param zxCreditQuery
	 * @return
	 * @version V1.0  <br/>
	 */
	int deletedRefined(ZxCreditQuery zxCreditQuery);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: updateBatch  <br/>
	 * @Description:批量删除/禁用/启用  <br/>
	 * @param modifier 修改人
	 * @param modifierName 修改人名称
	 * @param dpStatus 修改后状态
	 * @param ids 待修改数据ID
	 * @return
	 * @version V1.0  <br/>
	 */
	int updateBatch(String modifier, String modifierName, Integer dpStatus, List<String> ids);
	
	/**
	 * @author zhangpp <br/>
	 * @Title: insertBatch  <br/>
	 * @Description: 批量添加 <br/>
	 * @param zxCreditQuerys
	 * @return
	 * @version V1.0  <br/>
	 */
	int insertBatch(List<ZxCreditQuery> zxCreditQuerys);
	
}
